﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Data;
using System.Web;
using System.Web.Services;

namespace BU
{
    /**
     * 
     * Manager lié aux Catégories
     * 
     **/
    public class CategoryManager : EntityManager
    {

        /**
         * 
         * Récupère une catégorie selon un id
         * 
         */
        [WebMethod]
        public Category getOne(int id)
        {
            DAL.CategoryDataProvider provider = new DAL.CategoryDataProvider();
            DataRow categoryRow = provider.findOne(id);

            if (categoryRow == null)
                return null;

            // Contruction de la catégorie
            Category category = new Category();
            category.ID = (int)categoryRow["id_category"];
            category.Name = (string)categoryRow["name"];
            category.Description = (string)categoryRow["description"];

            return category;
        }

        /**
         * 
         * Récupère toutes les catégories
         * 
         */
        public List<Category> getAll()
        {
            DAL.CategoryDataProvider provider = new DAL.CategoryDataProvider();
            DataTable dt = provider.findAll();

            List<Category> categories = new List<Category>();

            // On boucle sur la DataTable et on construit les catégories
            foreach (DataRow row in dt.Rows)
            {
                Category category = new Category();
                category.ID = (int)row["id_category"];
                category.Name = (string)row["name"];
                category.Description = (string)row["description"];
                categories.Add(category);
            }

            return categories;
        }

        /**
         * 
         * Ajoute ou modifie une catégorie
         * 
         */
        public bool save(int id, string name, string description)
        {
            DAL.CategoryDataProvider provider = new DAL.CategoryDataProvider();

            DataTable categoryDT = new DataTable();
            categoryDT.Columns.Add("id", typeof(int));
            categoryDT.Columns.Add("name", typeof(string));
            categoryDT.Columns.Add("description", typeof(string));

            categoryDT.Rows.Add(id, name, description);

            provider.save(categoryDT); // chope bien la modif

            return true;
        }

        /**
         * 
         * Supprime une catégorie
         * 
         */
        public bool delete(int id)
        {
            DAL.CategoryDataProvider provider = new DAL.CategoryDataProvider();
            provider.delete(id);
            return true;
        }

        /**
         * 
         * Récupérer toutes les catégories et leurs produits
         * 
         */
        public List<Category> getAllAndProducts()
        {
            DAL.CategoryDataProvider provider = new DAL.CategoryDataProvider();
            DataSet ds = provider.findAllAndProducts();

            List<Category> categories = new List<Category>();


            foreach (DataRow row in ds.Tables["Catégories"].Rows)
            {
                Category category = new Category();
                category.ID = (int)row["id_category"];
                category.Name = (string)row["name"];
                category.Description = (string)row["description"];
                List<Product> products = new List<Product>();

                foreach (DataRow rowp in ds.Tables["Produits"].Rows)
                {
                    if ((int)rowp["category_id_category"] == category.ID)
                    {
                        Product product = new Product();
                        product.ID = (int)rowp["id_product"];
                        product.Name = (string)rowp["name"];
                        product.Description = (string)rowp["description"];
                        product.Price = (decimal)rowp["price"];
                        product.Stock = (int)rowp["stock"];
                        products.Add(product);
                    }

                }
                category.Products = products;
                categories.Add(category);
            }

            return categories;
        }
    }
}
